package com.ny.zmb.openapi.ysutil.utils;

import javax.xml.bind.DatatypeConverter;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;


/**
 * <P>BASE64编码解码工具包 </p> <p> 依赖javabase64-1.3.1.jar </P>
 *
 * @author 黄雄星（13077862552） 2014-1-16 上午8:44:44
 * @version 1.0
 */
public class Base64Utils {

    /**
     * <p> BASE64字符串解码为二进制数据 </p>
     *
     * @param base64
     * @return
     * @throws Exception
     */
    public static byte[] decode(String base64) {
        return DatatypeConverter.parseBase64Binary(base64);
    }

    /**
     * <p> 二进制数据编码为BASE64字符串 </p>
     *
     * @param bytes
     * @return
     * @throws Exception
     */
    public static String encode(byte[] bytes) {
        return DatatypeConverter.printBase64Binary(bytes);
    }

    // 将文件转为 Base64 编码字符串
    public static String changeBase(File file) throws IOException {
        // 读取文件并转换为字节数组
        byte[] fileBytes = readFileToByteArray(file);
        // 使用 Base64 编码字节数组
        return Base64.getEncoder().encodeToString(fileBytes);
    }
    // 将图片文件转为 Base64 编码字符串
    public static String encodeImageToBase64(String imagePath) {
        try {
            // 读取图片文件
            byte[] imageBytes = Files.readAllBytes(Paths.get(imagePath));

            // 使用 Base64 编码
            return Base64.getEncoder().encodeToString(imageBytes);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
    public static String encodeImageToBase64(InputStream imagePath) {
        try {
            int available = imagePath.available();
            // 使用 Base64 编码
            return Base64.getEncoder().encodeToString(new byte[available]);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
    // 辅助方法：读取文件为字节数组 (兼容 Java 8 及更早版本)
    private static byte[] readFileToByteArray(File file) throws IOException {
        try (InputStream is = new FileInputStream(file);
             ByteArrayOutputStream buffer = new ByteArrayOutputStream()) {
            byte[] temp = new byte[1024];
            int bytesRead;
            while ((bytesRead = is.read(temp)) != -1) {
                buffer.write(temp, 0, bytesRead);
            }
            return buffer.toByteArray();
        }
    }
    public static void main(String[] args) {
        // 设置图片路径
        String imagePath = "D:\\WorkSpace\\ZMB\\Java\\zmb\\src\\main\\resources\\static\\image\\0daff252c9a2c78c59c40dd6d989eeb.jpg"; // 这里替换为你的图片路径

        // 调用方法转换为 Base64 编码
        String base64EncodedImage = encodeImageToBase64(imagePath);

        if (base64EncodedImage != null) {
            System.out.println("Base64 Encoded Image: ");
            System.out.println(base64EncodedImage);
        } else {
            System.out.println("Failed to encode image.");
        }
    }
}
